home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 297_01 / prmain.c < prev    next >
C/C++ Source or Header  |  1991-12-30  |  3KB  |  88 lines

  1. /*
  2. HEADER:        ;
  3. TITLE:        Small Prolog;
  4. VERSION:    2.O;
  5.  
  6. DESCRIPTION:    "Interactive Prolog interpreter with lisp-like syntax.
  7.         Will run on IBM-PC, Atari ST and Sun-3, and should be very
  8.         easy to port to other machines.
  9.         Requires sprolog.ini and sprolog.inf on the same directory."
  10. KEYWORDS:    Programming language, Prolog.
  11. SYSTEM:        MS-DOS v2+, TOS, SUN-OS;
  12. FILENAME:    prmain.c;
  13. WARNINGS:    Better to compile this with compact or large model on the PC.
  14.  
  15. SEE-ALSO:    pr*.*
  16. AUTHORS:    Henri de Feraudy
  17. COMPILERS:    Turbo C V1.5, Mark Williams Let's C V4,    Quick C 
  18.             on PC compatibles.
  19.         DJ Delorie's GCC386 on 386 based PC compatibles.
  20.         Mark Williams C V3.0 for the Atari ST ,
  21.         Megamax Laser C on the Atari
  22.         cc on the Sun-OS v3.5
  23.         gcc on a Sun
  24. */
  25. /* prmain.c */
  26. /* SPROLOG - a public domain prolog interpreter.
  27.  * Design goals: portability, small size, embedability and hopefully 
  28.  * educational.
  29.  * You must add the builtins you need (and remove the ones you don't).
  30.  * Input-output has been left to the trivial minimum.
  31.  * You are encouraged to modify prsun.c to adapt it to your machine.
  32.  * The syntax is LISPish, for reasons of simplicity and small code,
  33.  * but this does have the advantage that it encourages meta-programming
  34.  * (unlike Turbo-Prolog).
  35.  * Very little in the way of space saving techniques have been used (in the
  36.  * present version). There is not yet any tail recursion optimisation or
  37.  * garbage collection.
  38.  */
  39.  
  40. #include <stdio.h>
  41.  
  42. #define CRPLEASE "Press Return"
  43.  
  44. extern void ini_alloc(), ini_term(), ini_hash(), ini_builtin(), ini_globals();
  45.  
  46. void init_prolog()/* call this once in your application */
  47. {
  48. /* initialise I-O */
  49.     ini_term();     /* in machine dependent file     */
  50. /* allocate memory zones */
  51.     ini_alloc();    /* in pralloc.c         */
  52. /* initialise symbol table */
  53.     ini_hash();    /* in prhash.c             */
  54. /* make builtin predicates */
  55.     ini_builtin();    /* in prbuiltin.c        */
  56. /* intialise global variables */
  57.     ini_globals();  /* in pralloc.c         */
  58. }
  59.  
  60. main(argc,argv)
  61. int argc;
  62. char *argv[];
  63. {
  64.     int i;
  65.     init_prolog();
  66.     pr_string("SMALL PROLOG 2.O  \n");
  67.     pr_string("by Henri de Feraudy\n");
  68. /* load initial clauses */
  69.     load("sprolog.ini"); /* see prconsult.c for load */
  70.  
  71. /* load files passed as command line arguments */
  72.     for(i = 1; i < argc; i++)
  73.        {
  74.        load(argv[i]);
  75.        }
  76.  
  77. /* execute initial query from file query.ini */
  78.     if(initial_query("query.ini"))/* interact with user */
  79.     query_loop();    /* in prlush.c            */
  80. /* clean up I-O */
  81.     exit_term();    /* in machine dependent file     */
  82.  
  83. /* normal exit */
  84.     exit(0);
  85. }
  86.  
  87. /* end of file */
  88.